package org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.habilidad;

import org.javahispano.javacup.modelo.Constantes;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.Futbolista;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.FutbolistaBase;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.Balon;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.PosicionCampo;

/**
 * @author Joan Crosas
 *
 */
public class RetrocederConBalon extends HabilidadConBalon {
	

	public RetrocederConBalon( Futbolista futbolista ) {
		super(futbolista);
	}

	@Override
	public boolean ejecutar() {
		 
		if( futbolista.getIteracionesParaRematar() == 0 && 
				futbolista.balonEncima( futbolista.getVisionPartido().getBalon() ) ) {
			
			double potenciaMax = futbolista.potenciaMaxAutopase();
			Balon balon = null;
			
			double anguloBase = 3 * Math.PI / 2;
			PosicionCampo porteria = new PosicionCampo( Constantes.centroArcoInf );
			if( futbolista.getPosicion().distancia( porteria ) < FutbolistaBase.DISTANCIA_PORTERIA_AUTOPASE ) {
				anguloBase = futbolista.getPosicion().angulo( porteria );
				anguloBase += Math.PI;
			}
			
			// retornar el primer autopase bo que trobi
			double steps = Math.PI / ( 2 * FutbolistaBase.DESVIO_ANGULO_AUTOPASE );
			double angulo = anguloBase;
			double potencia;
			for( int j = 0; j < steps; j++ ) {
				for( int k = -1; k < 2; k+=2 ) { // +/-
					for( int i = 1; i <= FutbolistaBase.DIVISIONES_POTENCIA_AUTOPASE; i++ ) {
						potencia = potenciaMax - ( FutbolistaBase.DIVISIONES_POTENCIA_AUTOPASE - i ) * potenciaMax / FutbolistaBase.DIVISIONES_POTENCIA_AUTOPASE;
						angulo = anguloBase + ( k * ( steps - j ) * FutbolistaBase.DESVIO_ANGULO_AUTOPASE );
						balon = evaluarPase( futbolista, angulo, potencia, 0, true );
						if( balon != null ) {
							futbolista.getVisionPartido().disminuirRestriccionesPase();
							return true;
						}
					}
					if( angulo == anguloBase ) {
						j++;
						k-=2;
					}
				}
			}
		}
		
		
		return false;
	}
	


}
